export default {
    namespaced: true,
    state: () => ({
        list: JSON.parse(localStorage.getItem('todolist') || '[]'),
        isSel: 'all',
        
    }),
    mutations: {
        todoAdd(state,payload) {
            let id = state.list.length > 0 ? state.list[state.list.length - 1].id + 1 : 100
            // 将子组件传递过来的任务添加至 list 中
            state.list.push({
              id,
              name: payload.taskname,
              isDone: false
            })
        },
        todoRemove(state,payload) {
            state.list.forEach((item, index) => {
                if (item.id === payload.id) {
                    state.list.splice(index, 1)
                }
            })
        },
        todoChange(state,payload) {
            state.isSel = payload.isS
        },
        todoClear(state) {
            let newArr = []
            state.list.forEach((item, index) => {
              if (!item.isDone) {
                newArr.push(item)
              }
            })
            state.list = newArr
        },
        setAll(state,val) {
          // console.log(val)
          state.list.forEach(item => item.isDone = val)
        },
        todoDone(state,payload) {
          state.list[state.list.findIndex(item => item.id == payload.id)].isDone = payload.check
        }
            
    },
    getters: {
        showList(state) {
            // 根据当前最新的状态来对 list 进行筛选  
            if (state.isSel === 'yes') {
              // filter 数组筛选/过滤
              // 返回一个新数组, 会将循环过程中符合条件的加入新数组最后返回
              // return this.list.filter(item => item.isDone)
              let newArr = []
              // 如果当前是 yes 就把 isDone 为 true 的数据放到新数组中返回
              state.list.forEach(item => {
                  if (item.isDone) {
                      newArr.push(item) // 地址值加入到 newArr
                }
              })
              return newArr
            } else if (state.isSel === 'no') {
              // return this.list.filter(item => !item.isDone)
              // 如果当前是 no 就把 isDone 为 false 的数据放到新数组中返回
              let newArr = []
              state.list.forEach(item => {
                if (!item.isDone) {
                  newArr.push(item)
                }
              })
              return newArr
            } else {
              // 如果当前是 all 就全部返回
              return state.list
            }
        },
        todoAll(state) {
          // 根据小选框的选中状态来决定
          // 如果全部选中就返回 true
          // 只要有一个没选中就返回 false
          
          if (state.list.length === 0) return false
          return state.list.every(item => item.isDone)
        }
        
    }
}